package util;

import org.junit.Test;

/**
 * 结论：
 * 
 * 1、Math.random()                  返回 [0,1) 的 double
 * 2、(int)(Math.random()*n)         返回 [0,n) 的 int
 * 3、(int)(Math.random()*(n-m))+m)  返回 [m,n) 的 int
 * 
 * @author Liu Huan
 */

public class _随机生成指定范围的整数 {
	public static void main(String[] args) {
		// Math.random() 返回一个double 范围是 [0,1)
		for (int i = 0; i < 10; i++) {
			System.out.println(Math.random());
		}
		System.out.println();
		
		// 随机产生 [m,nn) 的值
		int m=3, nn=12;
		for (int i = 0; i < 10; i++) {
			System.out.println((int) (Math.random()*(nn-m)+m));
		}
		System.out.println();
		
		// 随机产生 [0,n) 的值
		int n = 10;
		for (int i = 0; i < 10; i++) {
			System.out.println((int)(Math.random()*(n)));
		}
	}


	/**
	 * 线性同余方法（LCG）是一种产生伪随机数的一种方法。
	 *
	 */
	public long lcg(long seed) {
		long A = 2;
		long B = 4;
		long M = 1000;
		return (A * seed + B) % M;
	}

	@Test
	public void LCGTest() {
		for (int i = 0; i < 10; i++) {
			System.out.println(lcg(5));
		}
	}
}
